<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS resize: interactive behavior</title>
<link rel="help" href="https://drafts.csswg.org/css-ui/#resize">
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<meta name="assert" content="This test checks that elements are correctly resized
  when a user interacts with their resizing mechanism (simulated via WebDriver).">

<style>
body {
  margin-bottom: 1000px;
}
.test {
  width: 100px;
  height: 100px;
  overflow: scroll;
}
.resize-both {
  resize: both;
}
.resize-horizontal {
  resize: horizontal;
}
.resize-vertical {
  resize: vertical;
}
.resize-block {
  resize: block;
}
.resize-inline {
  resize: inline;
}
.wm-horizontal {
  writing-mode: horizontal-tb;
}
.wm-vertical {
  writing-mode: vertical-lr;
}
.test::before {
  content: "";
  display: block;
  width: 1000px;
  height: 1000px;
}
</style>

<div class="test resize-both wm-horizontal"></div>
<div class="test resize-both wm-vertical"></div>
<div class="test resize-horizontal wm-horizontal"></div>
<div class="test resize-horizontal wm-vertical"></div>
<div class="test resize-vertical wm-horizontal"></div>
<div class="test resize-vertical wm-vertical"></div>
<div class="test resize-block wm-horizontal"></div>
<div class="test resize-block wm-vertical"></div>
<div class="test resize-inline wm-horizontal"></div>
<div class="test resize-inline wm-vertical"></div>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>

<script>
function hasHorizontalWritingMode(cs) {
  return cs.writingMode === "horizontal-tb";
}

function getResolvedResize(cs) {
  let { resize } = cs;
  switch (resize) {
    case "block":
      return hasHorizontalWritingMode(cs) ? "vertical" : "horizontal";
    case "inline":
      return hasHorizontalWritingMode(cs) ? "horizontal" : "vertical";
    default:
      return resize;
  }
}

for (let target of document.querySelectorAll(".test")) {
  promise_test(async () => {
    // Scroll element to the top, to ensure that the pointer stays within the vieport
    // when resizing the element.
    target.scrollIntoView();

    await new test_driver.Actions()
      // Place pointer on the resizing mechanism.
      .pointerMove(49, 49, {origin: target})
      .pointerDown()
      // Resize the element.
      .pointerMove(149, 149, {origin: target})
      .pointerUp()
      .send();

    let resize = getResolvedResize(getComputedStyle(target));
    if (resize === "horizontal" || resize === "both") {
      assert_equals(target.offsetWidth, 200, "Width should have grown to 200px");
    } else {
      assert_equals(target.offsetWidth, 100, "Width should have stayed as 100px");
    }
    if (resize === "vertical" || resize === "both") {
      assert_equals(target.offsetHeight, 200, "Height should have grown to 200px");
    } else {
      assert_equals(target.offsetHeight, 100, "Height should have stayed as 100px");
    }
  }, target.className);
}
</script>
